#ifndef LOGINCONTROLLER_H
#define LOGINCONTROLLER_H

#include "NetworkManager.h"
#include <QObject>
#include <QCryptographicHash>
#include "LoguiUI.h"


class LoginController : public QObject
{
    Q_OBJECT
public:
    explicit LoginController(LoginUI* ui, NetworkManager* network, QObject *parent = nullptr);

signals:
    void loginSuccess();

private slots:
    // 按钮事件处理
    void onLoginButtonClicked();
    void onRegisterButtonClicked();
    void onCloseButtonClicked();

    // 网络事件处理
    void onServerReply(const wd::TLV& tlv);
    void onNetworkError(const QString& error);

private:
    // 登录流程处理
    void handleLoginSubmit();
    void handleLoginReply(const wd::TLV& tlv);
    void sendEncryptedPassword();

    // 注册流程处理
    void handleRegSubmit();
    void handleRegReply(const wd::TLV& tlv);

    // 密码加密
    QString encryptPassword(const QString& password, const QString& salt);

    // 重置状态
    void resetState();

    // 状态枚举
    enum LoginStage {
        CheckAccount,       // 登录第一阶段：验证账号
        SendPassword        // 登录第二阶段：发送加密密码
    };

    enum RegStage {
        CheckRegUsername,   // 注册第一阶段：检查用户名
        SubmitRegData       // 注册第二阶段：提交加密密码
    };

    // 成员变量
    LoginUI* m_ui;                // UI组件指针
    NetworkManager* m_network;    // 网络管理器指针

    bool m_isRegisterMode;        // 当前模式（登录/注册）
    LoginStage m_loginStage;      // 登录阶段
    RegStage m_regStage;          // 注册阶段
    QString m_currentUser;        // 当前操作的用户名
    QString m_salt;               // 服务器返回的盐值
    QString m_tempPwd;            // 临时存储密码
};

#endif // LOGINCONTROLLER_H
